/* 
图书管理的路由器
*/
const express = require('express')
const BookModel = require('../models/BookModel')

const router = express.Router()

// 图书列表
router.get('/', async (req, res) => {
  // 查找出所有的book列表
  try {
    const data = await BookModel.find()
    // 如果成功了, 返回图书列表
    res.json({
      status: '3000',
      data,
      message: '获取列表成功'
    })
  } catch (error) { // 如果失败了, 返回错误页面
    res.json({
      status: '3001',
      message: '获取列表失败'
    })
  }
})

// 一个图书信息
router.get('/:id', (req, res) => {
  // 得到id参数
  const {id} = req.params
  // 根据id查询得到对应的book
  BookModel.findById(id, (error, data) => {
    // 如果失败了, 返回错误页面
    if (error) {
      res.json({
        status: '3001',
        message: '获取图书失败'
      })
    } else { // 返回更新界面
      res.json({
        status: '3000',
        data,
        message: '获取图书成功'
      })
    }
  })
})



// 添加
router.post('/', (req, res) => {
  // 读取请求参数: book对象(没有_id)
  const book = req.body
  // 添加到数据库
  BookModel.create(book, (error, data) => {
    // 如果失败了, 返回错误页面
    if (error) {
      res.json({
        status: '3001',
        message: '添加图书失败'
      })
    } else { // 重定向: /book/list
      res.json({
        status: '3000',
        data,
        message: '添加图书成功'
      })
    }
  })
})

// 修改
router.put('/', (req, res) => {
  // 读取请求参数: book对象(包含_id)
  const book = req.body
  // 添加到数据库
  BookModel.updateOne({_id: book._id}, book,  (error, data) => {
    // 如果失败了, 返回错误页面
    if (error) {
      res.json({
        status: '3001',
        message: '修改图书失败'
      })
    } else { 
      res.json({
        status: '3000',
        data,
        message: '修改图书成功'
      })
    }
  })
})

// 删除
router.delete('/', (req, res) => {
  // - 读取请求参数: id
  const {id} = req.query
  // 删除对应的文档
  BookModel.deleteOne({_id: id}, (error, data) => {
    // 如果失败了, 返回错误页面
    if (error) {
      res.json({
        status: '3001',
        message: '删除图书失败'
      })
    } else { 
      res.json({
        status: '3000',
        data,
        message: '删除图书成功'
      })
    }
  })
})

module.exports = router